package cuiyt.juc.lock8;

import java.util.concurrent.TimeUnit;

/**
 * @author cyt
 * @create 2020-04-29 22:55
 */

// synchronized  会锁住方法的调用者！！！
//  static 静态是在类加载的时候就有了， 锁住的是Class模板。

public class test3 {

    public static void main(String[] args) throws InterruptedException {
        phone3 phone1 = new phone3();


        new Thread(() -> {
            try {
                phone1.sendMes();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }, "A").start();


        TimeUnit.SECONDS.sleep(1);
        new Thread(() -> {
            phone1.hello();
        }, "B").start();
    }
}


class phone3 {

    // synchronized 会获得方法调用者的锁 ， 并且在方法结束之前一直持有。
    public   synchronized void sendMes() throws InterruptedException {

        TimeUnit.SECONDS.sleep(4);
        System.out.println("发短信");
    }

    public synchronized void call() {
        System.out.println("打电话");
    }

    // 他是个普通的方法， 在这里没有获得该对象的锁， 方法可以直接执行。
    public void hello() {
        System.out.println("hello");
    }
}
